package function

import (
	"math/rand"
	"time"
)

type BoolFunction struct {
	isDefault    bool   // 是否为默认值
	defaultValue bool   // 默认数据
	auto         bool   // 是否随机
	size         int    // 生成的数据量
	trueMap      string // true 对映的值
	falseMap     string // false 对映的值
	Data         []interface{}
}

// DefaultBool 默认Bool
func DefaultBool(isDefault, value bool, size int) *BoolFunction {
	return &BoolFunction{
		isDefault:    isDefault,
		defaultValue: value,
		size:         size,
		Data:         make([]interface{}, size),
	}
}

// AutoBool 自动bool
func AutoBool(auto bool, size int) *BoolFunction {
	return &BoolFunction{
		auto: auto,
		size: size,
		Data: make([]interface{}, size),
	}
}

// MappingBool bool映射
func MappingBool(trueMap string, falseMap string, size int) *BoolFunction {
	return &BoolFunction{
		trueMap:  trueMap,
		falseMap: falseMap,
		size:     size,
		Data:     make([]interface{}, size),
	}
}

func (b *BoolFunction) Build() []interface{} {
	if b.isDefault {
		// 默认值
		for i := 0; i < b.size; i++ {
			b.Data[i] = b.defaultValue
		}
	} else if b.auto {
		// 随机生成
		rand.Seed(time.Now().Unix())
		for i := 0; i < b.size; i++ {
			if rand.Intn(2) == 0 {
				b.Data[i] = false
			} else {
				b.Data[i] = true
			}
		}
	} else {
		rand.Seed(time.Now().Unix())
		for i := 0; i < b.size; i++ {
			if rand.Intn(2) == 0 {
				b.Data[i] = b.falseMap
			} else {
				b.Data[i] = b.trueMap
			}
		}
	}
	return b.Data
}
